/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.ventas.modelo.dao;

import cl.ventas.modelo.Usuario;
import cl.ventas.modelo.Ventas;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;
import utilidades.Conexion;

/**
 *
 * @author RITTER
 */
public class VentasDao {
    
    
    protected Connection getConnection() {
        return Conexion.getInstanceConnection();
    }
    public List<Ventas> findAll() {
        List<Ventas> listaVentas = new LinkedList<Ventas>();
        ResultSet result = null;

        try {
            //venta_Codigo int , venta_Fecha string, usuario_codigo int, venta_TotalPagar double

            String query = "SELECT * FROM venta";
            Statement stmt = getConnection().createStatement();
            result = stmt.executeQuery(query);

            while (result.next()) {
                Ventas ventas = new Ventas ();
                ventas.setCodigo(result.getInt("venta_Codigo"));
                ventas.setFecha(result.getString("venta_Fecha"));
                ventas.setUsuario_codigo(result.getInt("usuario_Codigo"));
                ventas.setTotalp(result.getDouble("venta_TotalPagar"));
                
                listaVentas.add(ventas);
            }

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.out.println(se.toString());
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return listaVentas;
    }

    public Ventas findById(int VentaCodigo) {
        ResultSet result = null;
        Ventas ventas = null;

        try {
            // Componemos la sentencia SQL para obtener los productos.
            String query = "SELECT * FROM venta WHERE  venta_Codigo = ?";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            stmt.setInt(1,VentaCodigo);
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el producto.
            
            ventas= new Ventas ();
                ventas.setCodigo(result.getInt("venta_Codigo"));
                ventas.setFecha(result.getString("venta_Fecha"));
                ventas.setUsuario_codigo(result.getInt("usuario_Codigo"));
                ventas.setTotalp(result.getDouble("venta_TotalPagar"));
                
               

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return ventas;
    }

    public void save(Ventas venta) {

        PreparedStatement saveV;
        try {

//            if (venta.getCodigo()== 0) {
                saveV = getConnection().prepareStatement(
                        "INSERT INTO venta(venta_Fecha ,usuario_Codigo ,venta_TotalPagar) "
                        + "VALUES (?, ?, ?)");
                saveV.setString(1, venta.getFecha());
                saveV.setInt(2, venta.getUsuario_codigo());
                saveV.setDouble(3, venta.getTotalp());
                
                System.out.println("INSERT INTO ....");
//            } 
//            else {
//                saveV = getConnection().prepareStatement(
//                "UPDATE usuario SET venta_Fecha = ?, usuario_Codigo = ?, venta_TotalPagar= ? WHERE venta_Codigo= ?");
//                saveV.setString(1, venta.getFecha());
//                saveV.setInt(2, venta.getUsuario_codigo());
//                saveV.setDouble(3, venta.getTotalp());
//                saveV.setInt(4, venta.getCodigo());
//                
//            }

            saveV.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }

    public void delete(Ventas venta) {
        PreparedStatement saveV;
        try {

            if (venta.getCodigo()> 0) {
                saveV = getConnection().prepareStatement(
                        "DELETE FROM venta WHERE venta_Codigo = ?");

                saveV.setInt(1, venta.getCodigo());
                saveV.executeUpdate();
            }


            closeConnection();
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }
    }
    
    public int findMax() {
        ResultSet result = null;
        Ventas ventas = null;
        int Codigo = 0;
        try {
            // Componemos la sentencia SQL para obtener los productos.
            String query = "select Max(Venta.VENTA_CODIGO) as Codigo from VENTA";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el producto.
            Codigo = result.getInt("Codigo");

            result.close();
            stmt.close();
            closeConnection();

        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return Codigo;
    }
    protected void closeConnection() {
        Conexion.closeConnection();
    }
    
}
